<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>函数</title>
</head>

<body>
  <script>
    console.log('=====函数声明=====');
    // 函数的声明
    function getSum() {
      let sum = 0
      for (let i = 0; i <= 100; i++) {
        sum += i
      }
      console.log(sum);
    }
    // 函数调用
    getSum()

    console.log('=====函数传参及默认值=====');

    let sum1 = 0
    let num1 = +prompt('请输入第一个数')
    let num2 = +prompt('请输入第二个数')

    // start end 叫形参  
    // 形参给默认值
    function getSum1(start = 0, end = 0) {
      for (let i = start; i <= end; i++) {
        sum1 += i
      }
      console.log(sum1);
    }

    // num1 num2叫实参
    getSum1(num1, num2)

    console.log('=====函数返回值=====');
    function getTotal(x, y) {
      return x + y

      // return 返回值下面的代码都不会执行
      console.log(111);
    }
    let sum = getTotal(1, 2)
    console.log(sum);

    console.log('=====匿名函数(函数表达式)=====');
    let fn = function (x, y) {
      console.log(x + y);
    }
    fn(1, 2)
    /*
      匿名函数的具名函数的区别
      1.具名函数的调用可以写在任意位置
      2.匿名函数,必须先声明函数表达式,后调用
    */

    console.log('=====立即执行函数=====');
    // 立即执行函数:场景:避免全局变量污染
    // 写法1
    //   (function(x,y){})(1,2)
    //    调用函数 形参  实参       

    // 写法2
    // (function () { }())
    //  函数(){}()
    //  用括号包起来
    // (函数(){}())

    (function () {
      let num = 10
      console.log(num);
    })();

    (function () {
      let num = 11
      console.log(num);
    })()

      // 写法2
      (function () {
        let num = 10
        console.log(num);
      }())
  </script>
</body>

</html>